package com.ruoyi.common.utils;

import cn.hutool.cron.CronUtil;
import com.ruoyi.common.cron.CronJob;
import com.ruoyi.common.cron.JobInvokeUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.support.CronExpression;

/**
 * CronUtils
 *
 * @author kylewka
 * @since 2025/1/23
 */
@Slf4j
public class CronUtils extends CronUtil {

    public static boolean isValid(String cronExpression){
        return CronExpression.isValidExpression(cronExpression);
    }

    /**
     * 添加任务到定时器
     *
     * @param cronJob 定时任务
     */
    public static void addJob(CronJob cronJob) {
        CronUtil.schedule(cronJob.getJobId(), cronJob.getCronExpression(), () -> {
            try {
                // 运行定时任务
                log.info("任务开始 => [{}|{}] ", cronJob.getJobId(), cronJob.getJobName());
                JobInvokeUtil.invokeMethod(cronJob);
                log.info("任务结束 => [{}|{}] ", cronJob.getJobId(), cronJob.getJobName());
            } catch (Exception e) {
                log.error("任务执行异常 => [{}|{}],{}", cronJob.getJobId(), cronJob.getJobName(), e.getMessage(), e);
            }
        });
    }

    /**
     * 添加任务到定时器
     *
     * @param jobId 定时任务
     */
    public static void removeJob(Object jobId) {
        remove(String.valueOf(jobId));
    }


}
